[Amazon FSx for NetApp ONTAP] SMBによる通信をする際にNetBIOS関連のポートを閉じても良いか確認してみた
NetBIOS関連のポートは必要なのか気になる
こんにちは、のんピ(@non____97)です。
皆さんはAmazon FSx for NetApp ONTAP(以降FSxN)でNetBIOS関連のポートの解放は必要なのか気になったことはありますか? 私はあります。
AWS公式ドキュメントを見ると、FSxNでセキュリティグループのインバウンドルールに以下のようなNetBIOS関連のポートを開放するような書きっぷりがありました。
Protocol | Ports | Role |
---|---|---|
TCP | 139 | NetBIOS service session for CIFS |
TCP | 445 | Microsoft SMB/CIFS over TCP with NetBIOS framing |
UDP | 137 | NetBIOS name resolution for CIFS |
UDP | 139 | NetBIOS service session for CIFS |
参考 : NetBIOS service session for CIFS
では、このポートを開放するタイミングはいつでしょうか。
NetBIOSといえばWindowsですよね(IBM派もいるかも知れません)。WindowsといえばSMBです。
個人的にはSMBでNetBIOS関連のプロトコルを使用するシチュエーションとしては、「SMBのダイレクトホスティングをサポートしていない場合」と認識しています。
Microsoft公式ドキュメントにはNetBIOS関連のポートを閉じた場合のメリットが紹介されていました。
Windows では、TCP で直接ホストされている SMB プロトコルを使用して、ファイルとプリンターの共有トラフィックをサポートしています。 SMB 1.0 以前の CIFS トラフィックでは、TCP 経由の NetBIOS (NBT) プロトコルがサポートされましたが、Windows Vista および WINDOWS Server 2008 (SMB 2.0.2 以降) では、ポート 445 経由の TCP/IP が必要です。 NetBIOS トランスポートの削除には、次のようないくつかの利点があります。
- SMB トラフィックの転送を簡略化します。
- 名前解決の手段として WINS と NetBIOS ブロードキャストを削除する。
- ファイルとプリンターの共有のための DNS での名前解決の標準化。
- 攻撃方法としての安全性の低い NetBIOS プロトコルの削除
直接ホステッド インターフェイスと NBT インターフェイスの両方が有効になっている場合、両方のメソッドが同時に試行され、最初に応答が使用されます。 このメカニズムにより、SMB トラフィックの直接ホスティングをサポートしていないオペレーティング システムで Windows を適切に機能できます。
TCP/IP 経由のダイレクト ホスト サーバー メッセージ ブロック (SMB) - Windows Server | Microsoft Learn
ダイレクトホスティングSMBはWindows 2000以降はサポートされている認識です。そのため、接続クライアントがよっぽど古いOSやミドルウェアを使用していない限り、FSxNにおいてはNetBIOS関連のサポートは不要と考えております。
机上で評価するのも良くないと思うので、SMBで接続する場合、本当にNetBIOS関連のポートを閉じても良いのか確認してみます。
いきなりまとめ
- 意図的にNetBIOSを使うことを意識する場合は除いて、以下NetBIOS関連のポートは閉じたままでも問題なさそう
- TCP/139
- UDP/137
- UDP/139
- Windows Server 2022から以下SMBバージョンでアクセスする際、TCP/445さえFSxNファイルシステムで開放していれば問題ない
- SMB 3.1
- SMB 3.0
- SMB 2
- SMB 1
やってみた
FSxNファイルシステムがLISTENしているポートの確認
まず、デプロイほやほやのFSxNファイルシステムがLISTENしているポートの確認を行います。
::> network connections listening show
Vserver Name Interface Name:Local Port Protocol/Service
---------------- ------------------------------------- -----------------------
Node: FsxId0e64a4f5386f74c87-01
svm nfs_smb_management_1:40001 TCP/cifs-msrpc
svm nfs_smb_management_1:135 TCP/cifs-msrpc
svm nfs_smb_management_1:445 TCP/cifs-srv
svm nfs_smb_management_1:139 TCP/cifs-srv
svm nfs_smb_management_1:4049 UDP/rquota
svm nfs_smb_management_1:111 TCP/port-map
svm nfs_smb_management_1:111 UDP/port-map
svm nfs_smb_management_1:4046 TCP/sm
svm nfs_smb_management_1:4046 UDP/sm
svm nfs_smb_management_1:4045 TCP/nlm-v4
svm nfs_smb_management_1:4045 UDP/nlm-v4
svm nfs_smb_management_1:2049 TCP/nfs
svm nfs_smb_management_1:2049 UDP/nfs
svm nfs_smb_management_1:635 TCP/mount
svm nfs_smb_management_1:635 UDP/mount
15 entries were displayed.
NetBIOS関連で空いているポートは以下のとおりです。
- TCP/139
UDP/137であるNetBIOSによる名前解決(NBNS)はLISTENしていないようです。
NetBIOS over TCP(NBT)が有効になっているのかと併せて確認します。
::> set diag
Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y
::*> cifs options show -fields is-netbios-over-tcp-enabled, is-nbns-enabled
vserver is-netbios-over-tcp-enabled is-nbns-enabled
------- --------------------------- ---------------
svm true false
NBTは有効ですが、NBNSは無効になっていますね。
クライアントのNetBIOS over TCPの有効化状況
クライアントのNetBIOS over TCPの有効化状況を確認します。
> Get-WmiObject Win32_NetworkAdapterConfiguration |
Where-Object {$_.IPEnabled -eq $true} |
Select-Object Description, TcpipNetbiosOptions, @{Name="NetBIOSStatus";Expression={
switch ($_.TcpipNetbiosOptions) {
0 {"DHCP"}
1 {"Enabled"}
2 {"Disabled"}
default {"Unknown"}
}
}
}
Description TcpipNetbiosOptions NetBIOSStatus
----------- ------------------- -------------
Amazon Elastic Network Adapter 0 DHCP
DHCPによって配信される情報を使用するのがデフォルトのようです。
DHCPオプションセットは以下のとおりです。NetBIOS関連の設定はしていません。
セキュリティグループの設定
FSxNのセキュリティグループの設定をします。
セキュリティグループでは以下のようなNetBIOS関連のポートは開けないようにします。
Protocol | Ports | Role |
---|---|---|
TCP | 139 | NetBIOS service session for CIFS |
UDP | 137 | NetBIOS name resolution for CIFS |
UDP | 139 | NetBIOS service session for CIFS |
実際のFSxNファイルシステムにアタッチしたセキュリティグループのルールは以下のとおりです。
SMBファイル共有の作成
SMBファイル共有の作成を行います。
ONTAP CLIでshare
というファイル共有を作成します。
::*> cifs share create -share-name share -path /vol_ntfs
::*> cifs share show
Vserver Share Path Properties Comment ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm c$ / oplocks - BUILTIN\Administrators / Full Control
browsable
changenotify
show-previous-versions
svm ipc$ / browsable - -
svm share /vol_ntfs oplocks - Everyone / Full Control
browsable
changenotify
show-previous-versions
3 entries were displayed.
エクスプローラーによるアクセス
この状態でエクスプローラーで作成したSMBサーバーにアクセスします。
作成したSMBファイル共有が表示されました。
SMBファイル共有にアクセスしてファイルやフォルダの作成ができることを確認します。
SMBファイル共有にアクセスしてファイルやフォルダの削除ができることも確認します。
特に操作に問題はなさそうですね。操作が遅延したりといった事象も感じませんでした。
ONTAP CLIでセッションを確認します。
::*> cifs session show
Node: FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session Open Idle Connection
ID ID Workstation Windows User Files Time Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824224 13794244183659118594 1m 48s 4
10.0.0.139 CORP\ 3
Administrator
::*> cifs session show -instance
Vserver: svm
Node: FsxId0e64a4f5386f74c87-01
Session ID: 13794244183659118594
Connection ID: 1396824224
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.139
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\Administrator
UNIX User: root
Open Shares: 2
Open Files: 3
Open Other: 0
Connected Time: 2h 24m 39s
Idle Time: 1m 53s
Protocol Version: SMB3_1
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: true
Connection Count: 4
Active Shares: c$, share
SMB 3.1でアクセスしているようですね。
PowerShellによるアクセス
PowerShellによるアクセスも試しましょう。
> New-PSDrive -Name "Z" -PSProvider FileSystem -Root "\\SMB-SERVER.corp.non-97.net\share" -Persist
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
Z 0.00 15.20 FileSystem \\SMB-SERVER.corp.non-97.net\share
> ls Z:\
> echo test > Z:\test.txt
> ls Z:\
Directory: Z:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 8/23/2024 3:57 AM 14 test.txt
問題なく読み書きできていますね。
パケットキャプチャを眺める
エクスプローラーでアクセスする際の通信をパケットキャプチャして、WireSharkで眺めます。
NetBIOS関連のポートに通信しようとしている形式はありませんでした。
ちなみにNegotiate Protocol Request
を確認すると、SMBクライアントからサポートしているSMBバージョンをリクエストしていました。
そのレスポンスであるNegotiate Protocol Response
を確認すると、SMB 3.1.1
を使用することになったことが分かります。
SMB 3.0のアクセス
他のSMBバージョンだとどうでしょうか。
SMB 3.0から確認します。
ONTAP CLIでSMB 3.1を無効化します。
::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled
------- ------------ ------------ ------------ -------------
svm false true true true
::*> cifs options modify -smb31-enabled false
Warning: Disabling the SMB 3.1 protocol will disconnect all SMB 3.1 clients.
Do you want to continue? {y|n}: y
::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled
------- ------------ ------------ ------------ -------------
svm false true true false
::*> cifs session show
This table is currently empty.
設定変更をするとSMB 3.1で接続していたセッションが切断されました。
この状態でエクスプローラーを使って接続しました。特に問題なく接続できました。
パケットキャプチャの結果は以下のとおりです。
特にNetBIOS関連のポートにはアクセスしていないことが分かります。
また、SMB 3.0で通信していることも分かりますね。
ONTAP CLIからでも接続しているSMBのバージョンを確認できました。
::*> cifs session show -instance
Vserver: svm
Node: FsxId0e64a4f5386f74c87-01
Session ID: 13794244183659118623
Connection ID: 1396824256
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.139
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\Administrator
UNIX User: root
Open Shares: 1
Open Files: 2
Open Other: 0
Connected Time: 11s
Idle Time: 11s
Protocol Version: SMB3
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: true
Connection Count: 1
Active Shares: share
SMB 2のアクセス
続いてSMB 2です。
ONTAP CLIでSMB 3.0を無効化します。
::*> cifs options modify -smb3-enabled false
Warning: Disabling the SMB 3.0 protocol will disconnect all SMB 3.0 and SMB 3.1 clients.
Do you want to continue? {y|n}: y
Warning:
When SMB 3.0 was disabled for Vserver "svm", the SMB 3.1 and copy offload and multichannel features were also disabled. If you re-enable SMB 3.0 and want to enable these features, specify "-smb31-enabled true -copy-offload-enabled true
-is-multichannel-enabled true" with "-smb3-enabled true".
::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled
------- ------------ ------------ ------------ -------------
svm false true false false
::*> cifs session show -instance
There are no entries matching your query.
この状態でエクスプローラーを使って接続しました。特に問題なく接続できました。
パケットキャプチャの結果は以下のとおりです。
特にNetBIOS関連のポートにはアクセスしていないことが分かります。
また、SMB 2.1で通信していることも分かりますね。
ONTAP CLIからでも接続しているSMBのバージョンを確認できました。
::*> cifs session show -instance
Vserver: svm
Node: FsxId0e64a4f5386f74c87-01
Session ID: 13794244183659118624
Connection ID: 1396824257
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.139
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\Administrator
UNIX User: root
Open Shares: 1
Open Files: 3
Open Other: 0
Connected Time: 13m 13s
Idle Time: 13m 13s
Protocol Version: SMB2_1
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: true
Connection Count: 1
Active Shares: share
SMB 1のアクセス
SMB 1でも試します。
ONTAP CLIでSMB 2の無効化とSMB 1の有効化を行います。
::*> cifs options modify -smb2-enabled false -smb1-enabled true
Warning: SMB1 protocol version is obsolete and considered insecure. Therefore, the "smb1-enabled" parameter is deprecated. This parameter might be removed in a future release.
Do you want to continue? {y|n}: y
Warning: Disabling the SMB 2.0 protocol will disconnect all SMB 2.0, SMB 3.0 and SMB 3.1 clients.
Do you want to continue? {y|n}: y
Warning: When SMB 2.0 was disabled for Vserver "svm", the fake open feature was also disabled. If you re-enable SMB 2.0 and want to enable fake open, specify "-is-fake-open-enabled true" with "-smb2-enabled true".
When SMB 2.0 was disabled for Vserver "svm", the Large MTU feature was also disabled. If you re-enable SMB 2.0 and want to enable Large MTU, specify "-is-large-mtu-enabled true" with "-smb2-enabled true".
::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled
------- ------------ ------------ ------------ -------------
svm true false false false
::*> cifs session show -instance
There are no entries matching your query.
SMB 2を無効化する場合、Large MTUなど他オプションも無効にされるようです。
この状態でエクスプローラーを使って接続しようとすると、接続エラーになりました。
パケットキャプチャの結果は以下のとおりです。
Protocol
からSMB2の通信をしようとしていないことが分かりますね。
接続に失敗したのはクライアントがSMB 1をサポートしていないためです。
役割と機能からSMB 1のClientのインストールを行います。
OSの再起動を要求されるので再起動します。
再起動完了後、エクスプローラーを使って接続します。今回は特に問題なく接続できました。
パケットキャプチャの結果は以下のとおりです。
特にNetBIOS関連のポートにはアクセスしていないことが分かります。
ONTAP CLIからでも接続しているSMBのバージョンを確認すると、確かにSMB 1でアクセスしていました。
::*> cifs session show -instance
Vserver: svm
Node: FsxId0e64a4f5386f74c87-01
Session ID: 1
Connection ID: 1396824268
Incoming Data LIF IP Address: 10.0.8.246
Workstation IP Address: 10.0.0.139
Authentication Mechanism: Kerberos
User Authenticated as: domain-user
Windows User: CORP\Administrator
UNIX User: root
Open Shares: 1
Open Files: 2
Open Other: 0
Connected Time: 23s
Idle Time: 13s
Protocol Version: SMB1
Continuously Available: No
Is Session Signed: false
NetBIOS Name: -
SMB Encryption Status: unencrypted
Large MTU Enabled: false
Connection Count: 1
Active Shares: share
意図的にNetBIOSを使うことを意識する場合は除いて、閉じたままでも問題なさそう
Amazon FSx for NetApp ONTAPにおいて、SMBによる通信をする際にNetBIOS関連のポートを閉じても良いか確認してみました。
結論、閉じたままでも問題なさそうです。
そもそもNetApp公式ドキュメントを確認すると、セキュリティグループのインバウンドルールとして設定するポートにはNetBIOS関連のポートであるUDP/137、UDP/139は記載されていませんでした。
また、同じくSMBサーバーの機能を持つFSx for Windows File Serverが使用するポート一覧を確認すると、NetBIOS関連のものはありませんでした。
抜粋 : Amazon VPC を使用したファイルシステムアクセスコントロール - Amazon FSx for Windows File Server
このことから意図的にNetBIOSを使うことを意識する場合は除いて、閉じたままでも問題なさそうであることが分かります。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!
おまけ : SMB設定を元に戻す
SMB 1を使用するにあたって変更したSMBの設定を戻す方法は以下のとおりです。簡単です。
::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled, is-fake-open-enabled, is-large-mtu-enabled, copy-offload-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled copy-offload-enabled is-fake-open-enabled is-large-mtu-enabled
------- ------------ ------------ ------------ ------------- -------------------- -------------------- --------------------
svm true false false false false false false
::*> cifs options modify -smb1-enabled false -smb2-enabled true -smb3-enabled true -smb31-enabled true -is-fake-open-enabled true -is-large-mtu-enabled true -copy-offload-enabled true
Warning: Disabling the SMB1 protocol will disconnect all SMB1 clients.
Do you want to continue? {y|n}: y
Warning: Enabling CIFS Large MTU may cause performance degradation for clients not using Large MTU.
Do you want to continue? {y|n}: y
::*> cifs options show -fields smb1-enabled, smb2-enabled, smb3-enabled, smb31-enabled, is-fake-open-enabled, is-large-mtu-enabled, copy-offload-enabled
vserver smb1-enabled smb2-enabled smb3-enabled smb31-enabled copy-offload-enabled is-fake-open-enabled is-large-mtu-enabled
------- ------------ ------------ ------------ ------------- -------------------- -------------------- --------------------
svm false true true true true true true